#include <cstdio>
#include <mutex>

namespace deprecated_copy {
class Object {
public:
    Object() = default;
    Object(const Object &obj)
        : member(obj.member)
    {
    }

private:
    int member = 1;
};

void context()
{
    Object o1, o2;
    o2 = o1;
}
} // namespace deprecated_copy

namespace overloaded_virtual {
class Base {
public:
    virtual ~Base() = default;
    virtual void Set(const int &a)
    {
        a_ = a;
    }

protected:
    int a_ = 1;
};

class Derived : public Base {
public:
    void Set(int a)
    {
        a_ = a;
    }
};

void context()
{
    Base *b = new Derived();
    b->Set(1);
}
} // namespace overloaded_virtual

namespace reorder_ctor {
class Base1 {
public:
    Base1(int a)
        : a_(a)
    {
    }

    int a_ = 2;
};

class Base2 {
public:
    Base2(int a)
        : a_(a)
    {
    }

    int a_ = 2;
};

class Derived : public Base2, public Base1 {
public:
    Derived(int a, int b)
        : Base1(a), Base2(b)
    {
    }
};
} // namespace reorder_ctor

namespace implicit_fallthrough {
int context(int int_param)
{
    switch (int_param) {
        case 1:
            int_param += 1;
        case 2:
            int_param += 1;
            [[fallthrough]];
        case 3:
            int_param += 1;
            break;
            [[fallthrough]];
        default:
            break;
    }
    return int_param;
}
} // namespace implicit_fallthrough

namespace copy_ctor_marked_deleted {
class Object {
private:
    std::mutex mutex;
};

void context()
{
    Object o1;
    Object o2 = o1;
}
} // namespace copy_ctor_marked_deleted

